Модуль:Инфобокс персонажа
local infoboxCharacter = {} function infoboxCharacter.infoboxCreate(frame) --десериализация аргументов local args = frame.args local argsImg = infoboxCharacter.tools.argsDeSerial(args.images, {"@",";",":"}, "^@;:∅") local argsParsedKind = infoboxCharacter.tools.argsParse(args.kind, argsImg, {"@",";"}, "^@;") --подготовка элементов --основа local infobox = infoboxCharacter.build.mainBoxCreate(args.number, args.width) --заголовок local header = infoboxCharacter.build.headerCreate(args.headerColor, args.headerFontColor, args.headerFontSize, args.name) --титул local title if (args.title ~= "") then title = infoboxCharacter.build.titleCreate(args.title) end --изображения local images if (argsImg1 and argsImg11) then images = infoboxCharacter.build.imagesCreate(argsImg, args) end --постройка инфобокса --заголовок infobox:node(header) --титул if (title) then infobox:node(title) end --изображения if (images) then for i = 1, #images do infobox:node(imagesi) end end return infobox end --local buttonsList = mw.html.create("div") --buttonsList:cssText("width:100%; margin:6px 0 0; text-align:center") --buttonsList:addClass("module-"..args.number.."-"..i) --buttonsList:attr("id", "buttonsList-"..args.number.."-"..i) --if (i > 1) then -- buttonsList:css("display", "none") --end --local button = mw.html.create("div") --button:addClass("infoboxButton") -- button:attr("data-description", parsedImagesArray1) --button:attr("id", "control-"..args.number.."-"..i.."-"..j) --buttonsList:node(button) --создание элементов infoboxCharacter.build = {} --основа function infoboxCharacter.build.mainBoxCreate(number, width) local mainBox = mw.html.create("div") mainBox:addClass("infoboxCharacter") mainBox:attr("id", "infoboxCharacter-"..number) mainBox:css("width", width) return mainBox end --заголовок function infoboxCharacter.build.headerCreate(backgroundColor, fontColor, fontSize, name) local header = mw.html.create("div") header:addClass("infoboxCharacterHeader") header:css("background-color", backgroundColor) local headerText = mw.html.create("div") headerText:cssText("margin:auto; color:"..fontColor.."; font-size:"..fontSize) headerText:wikitext(name) header:node(headerText) return header end --титул function infoboxCharacter.build.titleCreate(titleText) local title = mw.html.create("div") title:addClass("infoboxCharacterTitle") title:wikitext(titleText) return title end --изображения function infoboxCharacter.build.imagesCreate(argsImg, args) local images = {} for i = 1, #argsImg do local imgBlock --если в текущем блоке одно изображение if (#argsImgi 1) then imgBlock = mw.html.create("div") imgBlock:wikitext("[[Файл:"..argsImgi12.."|"..args.width.."|link=]]") --если блок не один if (#argsImg > 1) then imgBlock:attr("id", "imgBlock-"..args.number.."-"..i) if (i > 1) then imgBlock:css("display", "none") end end if (args.title "") then imgBlock:css("margin-top", "6px") end imagesi = imgBlock --если в текущем блоке 2 и больше изображений else --если блок не один if (#argsImg > 1) then imgBlock = mw.html.create("div") imgBlock:attr("id", "imgBlock-"..args.number.."-"..i) if (i > 1) then imgBlock:css("display", "none") end end for j = 1, #argsImgi do local image = mw.html.create("div") image:attr("id", "image-"..args.number.."-"..i.."-"..j) if (argsImgij3) then image:wikitext("[[Файл:"..argsImgij3.."|"..args.width.."|link=]]") elseif (argsImgij2) then image:wikitext("[[Файл:"..argsImgij2.."|"..args.width.."|link=]]") end if (j > 1) then image:css("display", "none") end --если блок не один if (#argsImg > 1) then imgBlock:node(image) else imagesi = image end end --если блок не один if (#argsImg > 1) then imagesi = imgBlock end end end return images end --служебные функции infoboxCharacter.tools = {} function infoboxCharacter.tools.split(str, separator, reg) local result = {} if separator "" then result1 = str return result end local n local k local s = 0 if (not reg) then regExp = true else regExp = false end local i = 1 while k ~= str:len() do local substring n, k = string.find(str, separator, s + 1, regExp) if (k nil or n nil) then resulti = string.sub(str, s + 1, str:len()) break end substring = string.sub(str, s + 1, n - 1) if substring ~= "" then resulti = substring end s = k i = i + 1 end return result end function infoboxCharacter.tools.argsDeSerial(args, separators, pattern, iterNum) if (not iterNum) then iterNum = 1 end if (not pattern) then pattern = "" end local splitArray = infoboxCharacter.tools.split(args, separatorsiterNum) if (iterNum #separators) then return splitArray else local splitArray2 = {} for i = 1, #splitArray do if (splitArrayi ~= nil and string.find(splitArrayi, pattern) ~= nil) then splitArray2i = infoboxCharacter.tools.argsDeSerial(splitArrayi, separators, pattern, iterNum + 1) end end return splitArray2 end end function infoboxCharacter.tools.argsParse(args, images, separators, pattern) local result = {} local argsKind = infoboxCharacter.tools.argsDeSerial(args, separators, pattern) if (not images1) then if (not argsKind1) then return nil end result1 = {argsKind11} return result else if (#argsKind 0) then return nil else local template = "{0}" for i = 1, #images do resulti = {} for j = 1, #imagesi do if (argsKindij nil) then resultij = template else if (string.match(argsKindij, "!?{%d+%.%d+}")) then local a, b = string.match(argsKindij, "!?{(%d+)%.(%d+)}") a = tonumber(a) b = tonumber(b) if (a > i or b >= j) then resultij = "проверь ссылку" else resultij = resultab if (string.sub(argsKindij, 1, 1) "!") then template = resultab end end else if (string.sub(argsKindij, 1, 1) "!") then template = string.sub(argsKindij, 2, string.len(argsKindij)) resultij = template else resultij = argsKindij end end end end end end end return result end return infoboxCharacter